// const URL = require('url');
// const QS = require('querystring');
// const WeiXinApiRequest = require('./WeiXinApiRequest');
// const config = require('../../config/config');
// const UserModel = require('../../models/user/User');
// const UserWalletModel = require('../../models/user/Wallet');
// const LoginRecord = require('../../models/util/LoginRecord');
// const TokenUtil = require('../baseUtil/SecretUtil');
// const errors = require('../../errors');
// const request = require('request');
// const {WXBizDataCrypt} = require('../../utils/business_util/SecretUtil');
// const moment = require('moment');
// const mysql = require('../../config/db/mysql');
// const UserBindModel = require('../../models/user/UserBind');

const crypto = require('crypto');
const AdminUser = require('../../model/AdminUser');
const CommonUtil = require('../../util/businessUtil/CommonUtil');
const errors = require('../../errors');
const LogUtil = require('../baseUtil/LogUtil');

//微信小程序登录UTIL
// async function wxAppLogin(js_code) {
//     return new Promise(((resolve, reject) => {
//         request({
//             method: 'GET',
//             uri: 'https://api.weixin.qq.com/sns/jscode2session',
//             qs: {
//                 appid: config.wechat_config.appID,
//                 secret: config.wechat_config.appSecret,
//                 js_code,
//                 grant_type: 'authorization_code',
//             },
//             json: true,
//         }, (err, response, body) => {
//             if (err) reject(err)
//             resolve(body)
//         })
//     }))
// }

module.exports = {

    // // 微信网页高级授权登录
    // wxPublicWebSeniorAuth: async (req, res, next) => {
    //     let app_id = req.body.app_id//应用id
    //     const redirect_url = req.body.url//登录成功重定向至首页
    //     const index = `https://${config.wechat_config.whchat_webAuth_domain}/auth/wxPublicAuthCallback?url=${redirect_url}`//授权完成根据返回code获取用户信息
    //     //去此url让用户授权
    //     const curl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${config.wechat_config.appID}&redirect_uri=${urlencode(index)}&response_type=code&scope=snsapi_userinfo&state=${app_id}&connect_redirect=1#wechat_redirect`
    //     try {
    //         //重定向到微信高级授权页面
    //         res.redirect(301, curl)
    //     } catch (e) {
    //         next(e)
    //     }
    // },
    //
    // // 微信网页静默授权登录
    // wxPublicWebCommonAuth: async (req, res, next) => {
    //     let app_id = req.body.app_id//应用id
    //     // const redirect_url = req.originalUrl.split('url=')[1]//登录成功重定向至首页
    //     const redirect_url = req.body.url//登录成功重定向至首页
    //
    //     const index = `https://${config.wechat_config.whchat_webAuth_domain}/auth/wxPublicAuthCallback?url=${redirect_url}`//授权完成根据返回code获取用户信息
    //     //去此url让用户授权
    //     const curl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${config.wechat_config.appID}&redirect_uri=${urlencode(index)}&response_type=code&scope=snsapi_base&state=${app_id}&connect_redirect=1#wechat_redirect`
    //     try {
    //         //重定向到微信高级授权页面
    //         res.redirect(301, curl)
    //     } catch (e) {
    //         next(e)
    //     }
    // },
    //
    // //微信授权回调并设置用户token
    // wxPublicAuthCallback: async (req, res, next) => {
    //     const url = URL.parse(req.url);
    //     const query = QS.parse(url.query);
    //     //获取跳转首页的地址
    //     const nexturl = req.originalUrl.split('url=')[1];
    //     if (!query.code) {
    //         return res.ok('url错误，请在微信浏览器内打开链接', {
    //             user_id: false,
    //         })
    //     }
    //     const code = query.code;
    //     const app_id = query.state;
    //     try {
    //         const tokenInfo = await WeiXinApiRequest.getAccessToken(code);
    //         if (tokenInfo.scope === 'snsapi_base') {
    //             const user = await UserModel.findOne({
    //                 where: {
    //                     wx_public_openid: tokenInfo.openid,
    //                     app_id: app_id
    //                 }
    //             });
    //             if (user && req.signedCookies.user_id === user.id) {
    //                 //发放令牌
    //                 let token = TokenUtil.getEncryptAccessToken(user.id);
    //                 req.session.user = {
    //                     id: user.id,
    //                     openid: tokenInfo.openid,
    //                     app_id: app_id,
    //                     token: token
    //                 };
    //                 res.setHeader('Content-Type', 'text/html')
    //                 res.setHeader('token', token)
    //                 res.cookie('user_id', user.id, {signed: true, maxAge: 1000 * 60 * 60 * 24 * 7, secure: true})//重新设置cookie有效期
    //                 res.redirect(301, nexturl)
    //                 return;
    //             } else {
    //                 res.cookie('user_id', user.id, {signed: true, maxAge: 1});//清除cookie申请高级授权
    //                 res.setHeader('Content-Type', 'text/html')
    //                 res.redirect(301, nexturl)
    //                 return;
    //             }
    //         } else if (tokenInfo.scope === 'snsapi_userinfo') {
    //             const wxUser = await WeiXinApiRequest.getWeixinUserInfo(tokenInfo.access_token, tokenInfo.openid)
    //             const userAuth = await UserModel.find({
    //                 where: {
    //                     openid: tokenInfo.openid,
    //                     app_id: app_id
    //                 }
    //             })
    //             let unionid = wxUser.unionid ? wxUser.unionid : 0;
    //             if (!userAuth) {
    //                 await UserModel.create({
    //                     app_id: app_id,
    //                     wx_public_openid: wxUser.openid,
    //                     wx_public_nickname: wxUser.nickname,
    //                     wx_public_avatar: wxUser.headimgurl,
    //                     last_login_ip: req.ip,
    //                     wx_public_sex: wxUser.sex,
    //                     wx_public_province: wxUser.province,
    //                     wx_public_city: wxUser.city,
    //                     wx_public_country: wxUser.country,
    //                     wx_public_privilege: wxUser.privilege,
    //                     wx_public_unionid: unionid,
    //                     login_way: 1
    //                 })
    //             } else {
    //                 await UserModel.update({
    //                     wx_public_openid: wxUser.openid,
    //                     wx_public_nickname: wxUser.nickname,
    //                     wx_public_avatar: wxUser.headimgurl,
    //                     last_login_ip: req.ip,
    //                     wx_public_sex: wxUser.sex,
    //                     wx_public_province: wxUser.province,
    //                     wx_public_city: wxUser.city,
    //                     wx_public_country: wxUser.country,
    //                     wx_public_privilege: wxUser.privilege,
    //                     wx_public_unionid: unionid
    //                 }, {
    //                     where: {
    //                         openid: wxUser.openid,
    //                         app_id: app_id,
    //                     }
    //                 })
    //             }
    //             let User = await UserModel.findOne({
    //                 where: {
    //                     openid: tokenInfo.openid,
    //                     app_id: app_id
    //                 }
    //             })
    //             //发放令牌
    //             let token = TokenUtil.getEncryptAccessToken(User.id)
    //             req.session.user = {
    //                 id: User.id,
    //                 openid: tokenInfo.openid,
    //                 app_id: app_id,
    //                 token: token
    //             }
    //             res.setHeader('Content-Type', 'text/html')
    //             res.setHeader('token', token)
    //             res.cookie('user_id', User.id, {signed: true, maxAge: 1000 * 60 * 60 * 24 * 7, secure: true})//重新设置cookie有效期
    //             res.redirect(301, nexturl)
    //         }
    //     } catch (e) {
    //         next(e)
    //     }
    // },
    //
    // //微信小程序授权登录
    // wxLiteSignIn: async (req, res, next) => {
    //     try {
    //         const {
    //             js_code, rawData, signature, encryptedData, iv
    //         } = req.body;
    //
    //         if (!js_code || js_code.length === 0) {
    //             return next(new errors.ValidationError('js_code不能为空', {
    //                 js_code,
    //             }))
    //         }
    //         if (!rawData || rawData.length === 0) {
    //             return next(new errors.ValidationError('rawData不能为空', {
    //                 rawData,
    //             }))
    //         }
    //         if (!signature || signature.length === 0) {
    //             return next(new errors.ValidationError('signature不能为空', {
    //                 signature,
    //             }))
    //         }
    //         if (!encryptedData || encryptedData.length === 0) {
    //             return next(new errors.ValidationError('encryptedData不能为空', {
    //                 encryptedData,
    //             }))
    //         }
    //         if (!iv || iv.length === 0) {
    //             return next(new errors.ValidationError('iv不能为空', {
    //                 iv,
    //             }))
    //         }
    //         let decryptData = {};
    //         let data = await wxAppLogin(req.body.js_code);
    //         const pc = new WXBizDataCrypt(config.wechat_config.appID, data.session_key);
    //         decryptData = pc.decryptData(encryptedData, iv);
    //         const shasum = crypto.createHash('sha1');
    //         const serverSha1Signature = shasum.update(rawData + data.session_key).digest('hex');
    //         if (signature !== serverSha1Signature) {
    //             return next(new errors.ValidationError('signature错误', {
    //                 signature,
    //             }))
    //         }
    //         let userBindModel = await UserBindModel.findOne({
    //             where: {
    //                 type: 2,
    //                 openid: decryptData.openId
    //             }
    //         })
    //
    //         let transaction = await mysql.transaction()
    //         if (!userBindModel) {
    //
    //             let userModelNew = await UserModel.create({  // 创建用户
    //                 gender: decryptData.gender,
    //                 avatar: decryptData.avatarUrl,
    //                 nickname: decryptData.nickName,
    //                 country: decryptData.country,
    //                 province: decryptData.province,
    //                 city: decryptData.city,
    //                 last_login_ip: req.ip,
    //                 login_way: 2
    //             }, {
    //                 transaction: transaction
    //             });
    //
    //             await UserWalletModel.create({
    //                 user_id: userModelNew.id,
    //                 wallet_balance: 0
    //             }, {
    //                 transaction: transaction
    //             })
    //
    //             await UserBindModel.create({  // 创建用户
    //                 user_id: userModelNew.id,
    //                 type: 2,
    //                 openid: decryptData.openId,
    //             }, {
    //                 transaction: transaction
    //             });
    //             transaction.commit()
    //             let token = TokenUtil.getEncryptAccessToken(userModelNew.id)
    //             req.session.user = {
    //                 id: userModelNew.id,
    //                 openid: decryptData.openId,
    //                 token: token
    //             };
    //
    //             // pv +1
    //             let lgRd = await LoginRecord.findOne({where:{
    //                 create_at: moment().format('YYYY-MM-DD')
    //             }})
    //             if(!lgRd){
    //                 await LoginRecord.create({
    //                     pv:1,
    //                     create_at: moment().format('YYYY-MM-DD')
    //                 },{transaction})
    //             }else{
    //                 await LoginRecord.increment('pv',{by:1,transaction})
    //             }
    //             // 存入redis方便统计uv，理应存入MongoDB方便查询
    //             await nredis6.rpushList(`lg${moment().format('YYYY-MM-DD')}`,`${moment().format('HH:mm:ss')}-${userModelNew.id}`)
    //
    //             return res.ok('登录成功', {
    //                 token,
    //             })
    //         } else {
    //
    //             transaction.commit()
    //             let token = TokenUtil.getEncryptAccessToken(userBindModel.user_id)
    //             req.session.user = {
    //                 id: userBindModel.user_id,
    //                 openid: decryptData.openId,
    //                 token: token
    //             };
    //             return res.ok('登录成功', {
    //                 token,
    //             })
    //         }
    //     } catch (e) {
    //         next(e)
    //     }
    // },


    commonLogin: async(req, res, next) => {
        console.log(req.body,'dsds')
        let username = req.body.username;
        let verified = req.body.verified;
        let email = req.body.email;
        let cellphone = req.body.cellphone;
        let md5 = crypto.createHash('md5');
        verified = md5.update(verified).digest('hex');

        let option = {};
        option.password = verified

        if (username) {
            option.account = username;
        }
        if (email) {
            option.email = email;
        }
        if (cellphone) {
            option.cellphone = cellphone;
        }
        option.isDelete = 0
        console.log(option)
        let adminUser = await AdminUser.findOne(option).populate('role').exec();
        if (!adminUser) {
            return next(new errors.ValidationError("用户名或密码错误"))
        } else {
            let roleName = adminUser.role.map(e=>{return e.name})
            let roleId = adminUser.role.map(e=>{return e._id})

            let _user = JSON.parse(JSON.stringify(adminUser))

            _user.path = JSON.parse(await CommonUtil.getAllAuthorityByUser(adminUser._id));
            console.log(req)
            req.session.user = _user // may change to redis

            LogUtil.info(`${adminUser.account}登录了`, option);

            let resultData = {
                name: adminUser.account,
                uuid: adminUser._id,
                token: 'testasdwer3231asdxa',
                // role: adminUser.role,
                role: roleId,
                code: 200,
                // rights: adminUser.role,
                rights: roleId,
                roleName:roleName
            }

            return res.json(resultData)
        }
    }
}